# coding=utf-8
class PTX:
    def __init__(self):
        # 存储ptx headers
        self.headers = {}
        # 对应的kernel函数
        self.kernels = {}
        # 全局变量 比如global_varies['x1] = { "const":, }
        self.global_varies = {}


class Kernel:
    """Kernel函数"""

    def __init__(self):
        self.entry_attributes = set()
        self.params = {}
        self.regs = {}
        # kernel函数的所有原生代码
        self.raw_code = ""
        # 按顺序把bb拼起来，里面是bb对象
        self.code = []
        # 主函数的basic block
        self.basic_block = BasicBlocks()


class Reg:
    """寄存器"""

    def __init__(self):
        self.name = ""
        self.attributes = set()
        self.array_size = 0
        self.content = []

    def __getitem__(self, index):
        """重载[]运算符，以便直接返回数据？但是貌似用不着"""
        return self.content[index]

    def __len__(self):
        return self.array_size


class BasicBlocks:
    """在一个kernel里，可能会有if分出的代码块"""

    def __init__(self):
        # 从哪里跳过来的？？？
        # self.jmp_from = 0
        # 从什么指令跳过来的，可能有多条。
        # self.raw_line =
        # 用[]是因为需要改变代码，但是kernel中使用""是因为kernel代码可以用bb拼起来
        self.raw_code = []
